import vnode from './vnode'
import createEle from './creatEle'
import patchVNode from './patchVNode'
export default function patch (oldVnode, newVnode) {
    // 第一步： 判断传入的oldVnode是DOM节点还是虚拟节点
    if (oldVnode.sel == '' || oldVnode.sel == undefined) {
        // 是DOM节点，则包装为虚拟节点
        oldVnode = vnode(oldVnode.tagName.toLowerCase(), {}, [], undefined, oldVnode)
    }
    // 第二步：判断新老节点是否为同一节点
    if (oldVnode.key === newVnode.key && oldVnode.sel === newVnode.sel) {
        // 是同一个虚拟节点，精细化比较，最小量更新
        console.log('是同一虚拟节点')
        patchVNode(oldVnode, newVnode)
    } else {
        // 不是同一个虚拟节点，创建新的插新的，删旧的
        const newVnodeElm = createEle(newVnode, oldVnode.elm)
        if (oldVnode.elm.parentNode && newVnodeElm) {
            // 插入新节点
            oldVnode.elm.parentNode.insertBefore(newVnodeElm, oldVnode.elm)            
        }
        // 删除旧节点（container）
        oldVnode.elm.parentNode.removeChild(oldVnode.elm)
    }
}